Internal Transfer
Move funds between two accounts in ledger (same customer/different customers). This API is useful to support internal transfer between two different customer accounts. This is also useful in the fintech context while trying to automate the movement funds between accounts of the same customer.
Method: POST
{{URL}}/rpc/paymentv2
Example
Request Parameters
Parameter | Description |
---|---|
method | String Name of the API method to be invoked. Must be "ledger.ach.transfer" |
id | String Unique identifier for the request, used for tracking |
params | Object |
payload | Object |
channel | String Channel through which the transaction is initiated (e.g., "API") |
transactionType | String Type of transaction. Sample Value : "INTERNAL_TRANSFER" |
product | String Product associated with the transfer. Sample Value : "DEFAULT" |
program | String Program name associated with the transaction. Sample Value : "DEFAULT" |
transactionDateTime | String (DateTime) Date and time of the transaction in YYYY-MM-DD HH:MM:SS format |
reference | String Unique reference ID for the transaction |
reason | String Reason for the transaction. Sample Value : "Settlement" |
transactionAmount | Object |
amount | String (Decimal) Amount to be transferred. Sample Value : "200" |
currency | String Currency of the transaction amount. Sample Value : "USD" |
debtorAccount | Object |
identificationType | String Type of debtor account identifier. Sample Value : "ACCOUNT_NUMBER" |
identificationType2 | String Account type Constant Values : " CHECKING / SAVINGS" |
identification | String Debtor’s Account Number |
institution | Object |
name | String Name of the debtor's financial institution. Sample Value : "FINWISE BANK" |
identificationType | String Type of institution identifier. Sample Value : "ABA" |
identification | String Institution identifier. Sample Value : "101110802" |
creditorAccount | Object |
identificationType | String Type of creditor account identifier. Sample Value : "ACCOUNT_NUMBER" |
identificationType2 | String Account type Constant Values : " CHECKING / SAVINGS" |
identification | String Identifier of the creditor's account |
institution | Object |
name | String Name of the Creditor’s financial institution. Sample Value : "CITI BANK" |
identificationType | String Type of institution identifier. Sample Value : "ABA" |
identification | String Institution identifier. Sample Value : "101110802" |
api | Object |
credential | String Basic (space) [( "<Username>:<apiKey>" ) as Base64 encoded value] to be provided Sample Value: "Basic bmF2eWEubitlbXBAbmV0eGQuY29tOmY1OWIwY2NlOTU4ZTQ1YTc4MGVhZWIzYWVjOWVjZDAx" |
signature | String Sign the request payload (params.payload) using private key. Sample Value: "MEQCIAbpxHpdOyBEVlmxPYv7m4Z1OvWJJYw7g7u3GE3T9nmvAiBjKHckSvb1M6O4t7FeWsn2z9Y3dMeYn3HyX/k28ek/Dw==" |
apiKey | String API key is provided at the time of device registration. Sample Value : "f59b0cce958e45a780eaeb3aec9ecd01" |
- cURL
- C#
- Go
- NodeJS
curl --location '{{URL}}/rpc/paymentv2' \
--header 'Content-Type: application/json' \
--data '{"method":"ledger.ach.transfer","id":"1","params":{"payload":{"program":"100000000045001","product":"PL","channel":"INTERNAL","transactionType":"INTERNAL_TRANSFER","_transactionDateTime":"2021-01-19 06:20:25","reference":"REF100000514","reason":"Settlement","transactionAmount":{"amount":"100","currency":"USD"},"debtorAccount":{"identificationType2":"SAVINGS","identification":"200686362505215","identificationType":"ACCOUNT_NUMBER","institution":{"name":"FINWISE BANK","identification":"011102638","identificationType":"ABA"}},"creditorAccount":{"identification":"200501916028116","identificationType":"ACCOUNT_NUMBER","identificationType2":"SAVINGS","institution":{"name":"FINWISE BANK","identification":"101115399","identificationType":"ABA"}}},"api":{"credential":"Basic cmFqYXJlcEBuZXR4ZC5jb206MDM1Nzg2MmYxYTk4NDc3OGE0ZDU4NGE2YzBjYTMyNzM=","signature":"MEYCIQCY0HxPlIGYG98sz+/l2mZY7oXUcUxZj6aWONfUUk1kGwIhANrOkk3w4nciALAL52XUO+2+JoiXWXnRjuKBp2OBlhgD","apiKey":"0357862f1a984778a4d584a6c0ca3273"}}'
var options = new RestClientOptions("{{URL}}")
{
MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/PL/rpc/paymentv2", Method.Post);
request.AddHeader("Content-Type", "application/json");
var body = @"{" + "\n" +
@" ""method"": ""ledger.ach.transfer""," + "\n" +
@" ""id"": ""1""," + "\n" +
@" ""params"": {" + "\n" +
@" ""payload"": {" + "\n" +
@" ""program"": ""100000000045001""," + "\n" +
@" ""product"": ""PL""," + "\n" +
@" ""channel"": ""INTERNAL""," + "\n" +
@" ""transactionType"": ""INTERNAL_TRANSFER""," + "\n" +
@" ""_transactionDateTime"": ""2021-01-19 06:20:25""," + "\n" +
@" ""reference"": ""REF100000514""," + "\n" +
@" ""reason"": ""Settlement""," + "\n" +
@" ""transactionAmount"": {" + "\n" +
@" ""amount"": ""100""," + "\n" +
@" ""currency"": ""USD""" + "\n" +
@" }," + "\n" +
@" ""debtorAccount"": {" + "\n" +
@" ""identificationType2"": ""SAVINGS""," + "\n" +
@" ""identification"": ""200686362505215""," + "\n" +
@" ""identificationType"": ""ACCOUNT_NUMBER""," + "\n" +
@" ""institution"": {" + "\n" +
@" ""name"": ""FINWISE BANK""," + "\n" +
@" ""identification"": ""011102638""," + "\n" +
@" ""identificationType"": ""ABA""" + "\n" +
@" }" + "\n" +
@" }," + "\n" +
@" ""creditorAccount"": {" + "\n" +
@" ""identification"": ""200501916028116""," + "\n" +
@" ""identificationType"": ""ACCOUNT_NUMBER""," + "\n" +
@" ""identificationType2"": ""SAVINGS""," + "\n" +
@" ""institution"": {" + "\n" +
@" ""name"": ""FINWISE BANK""," + "\n" +
@" ""identification"": ""101115399""," + "\n" +
@" ""identificationType"": ""ABA""" + "\n" +
@" }" + "\n" +
@" }" + "\n" +
@" }," + "\n" +
@" ""api"": {" + "\n" +
@" ""credential"": ""Basic cmFqYXJlcEBuZXR4ZC5jb206MDM1Nzg2MmYxYTk4NDc3OGE0ZDU4NGE2YzBjYTMyNzM=""," + "\n" +
@" ""signature"": ""MEYCIQCY0HxPlIGYG98sz+/l2mZY7oXUcUxZj6aWONfUUk1kGwIhANrOkk3w4nciALAL52XUO+2+JoiXWXnRjuKBp2OBlhgD""," + "\n" +
@" ""apiKey"": ""0357862f1a984778a4d584a6c0ca3273""" + "\n" +
@" }" + "\n" +
@" }" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "{{URL}}/rpc/paymentv2"
method := "POST"
payload := strings.NewReader(`{
"method": "ledger.ach.transfer",
"id": "1",
"params": {
"payload": {
"program": "100000000045001",
"product": "PL",
"channel": "INTERNAL",
"transactionType": "INTERNAL_TRANSFER",
"_transactionDateTime": "2021-01-19 06:20:25",
"reference": "REF100000514",
"reason": "Settlement",
"transactionAmount": {
"amount": "100",
"currency": "USD"
},
"debtorAccount": {
"identificationType2": "SAVINGS",
"identification": "200686362505215",
"identificationType": "ACCOUNT_NUMBER",
"institution": {
"name": "FINWISE BANK",
"identification": "011102638",
"identificationType": "ABA"
}
},
"creditorAccount": {
"identification": "200501916028116",
"identificationType": "ACCOUNT_NUMBER",
"identificationType2": "SAVINGS",
"institution": {
"name": "FINWISE BANK",
"identification": "101115399",
"identificationType": "ABA"
}
}
},
"api": {
"credential": "Basic cmFqYXJlcEBuZXR4ZC5jb206MDM1Nzg2MmYxYTk4NDc3OGE0ZDU4NGE2YzBjYTMyNzM=",
"signature": "MEYCIQCY0HxPlIGYG98sz+/l2mZY7oXUcUxZj6aWONfUUk1kGwIhANrOkk3w4nciALAL52XUO+2+JoiXWXnRjuKBp2OBlhgD",
"apiKey": "0357862f1a984778a4d584a6c0ca3273"
}
}
}`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
var http = require('follow-redirects').http;
var fs = require('fs');
var options = {
'method': 'POST',
'hostname': 'localhost',
'port': 5010,
'path': '/PL/rpc/paymentv2',
'headers': {
'Content-Type': 'application/json'
},
'maxRedirects': 20
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
var postData = JSON.stringify({
"method": "ledger.ach.transfer",
"id": "1",
"params": {
"payload": {
"program": "100000000045001",
"product": "PL",
"channel": "INTERNAL",
"transactionType": "INTERNAL_TRANSFER",
"_transactionDateTime": "2021-01-19 06:20:25",
"reference": "REF100000514",
"reason": "Settlement",
"transactionAmount": {
"amount": "100",
"currency": "USD"
},
"debtorAccount": {
"identificationType2": "SAVINGS",
"identification": "200686362505215",
"identificationType": "ACCOUNT_NUMBER",
"institution": {
"name": "FINWISE BANK",
"identification": "011102638",
"identificationType": "ABA"
}
},
"creditorAccount": {
"identification": "200501916028116",
"identificationType": "ACCOUNT_NUMBER",
"identificationType2": "SAVINGS",
"institution": {
"name": "FINWISE BANK",
"identification": "101115399",
"identificationType": "ABA"
}
}
},
"api": {
"credential": "Basic cmFqYXJlcEBuZXR4ZC5jb206MDM1Nzg2MmYxYTk4NDc3OGE0ZDU4NGE2YzBjYTMyNzM=",
"signature": "MEYCIQCY0HxPlIGYG98sz+/l2mZY7oXUcUxZj6aWONfUUk1kGwIhANrOkk3w4nciALAL52XUO+2+JoiXWXnRjuKBp2OBlhgD",
"apiKey": "0357862f1a984778a4d584a6c0ca3273"
}
}
});
req.write(postData);
req.end();
Body
{
"method": "ledger.ach.transfer",
"id": "1",
"params": {
"payload": {
"program": "100000000045001",
"product": "PL",
"channel": "INTERNAL",
"transactionType": "INTERNAL_TRANSFER",
"_transactionDateTime": "2021-01-19 06:20:25",
"reference": "REF100000514",
"reason": "Settlement",
"transactionAmount": {
"amount": "100",
"currency": "USD"
},
"debtorAccount": {
"identificationType2": "SAVINGS",
"identification": "200686362505215",
"identificationType": "ACCOUNT_NUMBER",
"institution": {
"name": "FINWISE BANK",
"identification": "011102638",
"identificationType": "ABA"
}
},
"creditorAccount": {
"identification": "200501916028116",
"identificationType": "ACCOUNT_NUMBER",
"identificationType2": "SAVINGS",
"institution": {
"name": "FINWISE BANK",
"identification": "101115399",
"identificationType": "ABA"
}
}
},
"api": {
"credential": "{{Credential}}",
"signature": "{{signature}}",
"apiKey": "{{ApiKey}}"
}
}
}
Response: 200
Response Parameters
Parameter | Description |
---|---|
id | String Unique identifier matching the API request ID |
result | Object |
api | Object |
type | String Type of API response. Example: "INTERNAL_TRANSFER_ACK" |
reference | String Reference ID of the original transaction |
dateTime | String (DateTime) Date and time of the API response in YYYY-MM-DD HH:MM:SS format |
account | Object |
accountId | String Account ID of the account involved in the transaction |
balanceCents | Integer Available balance in cents after the transaction. |
holdBalanceCents | Integer Hold balance in cents |
status | String Status of the account. Example: "ACTIVE" |
result.transactionNumber | String Unique identifier for the processed transaction |
result.transactionStatus | String Status of the transaction. Example: "COMPLETED" |
result.transactionAmountCents | Integer Transaction amount in cents |
result.originalRequestBase64 | String (Base64 Encoded) Original request payload in Base64 encoded format |
result.processId | String Internal processing ID assigned to the transaction |
header | Object |
reference | String Reference ID echoed from the original request |
signature Mandatory | String Sign the request payload (params.payload) using private key. Sample Value: "MEYCIQC29ySJAaiLEPY8+jfTR12p7w6fag2LEzd9ei/4M0UZtgIhAMV3i2XuHWzZ3FkIonlMxnBLBAu9QPiA5c75OkOX0P+O" |
apiKey Optional | String API key is provided at the time of device registration. Sample Value : "f59b0cce958e45a780eaeb3aec9ecd01" |
{
"id": "1",
"result": {
"api": {
"type": "INTERNAL_TRANSFER_ACK",
"reference": "REF100000514",
"dateTime": "2025-06-04 13:30:13"
},
"account": {
"accountId": "200686362505215",
"balanceCents": 115384,
"holdBalanceCents": 600,
"status": "ACTIVE"
},
"transactionNumber": "QA00000003108008",
"transactionStatus": "COMPLETED",
"transactionAmountCents": 100,
"originalRequestBase64": "eyJjaGFubmVsIjoiSU5URVJOQUwiLCJ0cmFuc2FjdGlvblR5cGUiOiJJTlRFUk5BTF9UUkFOU0ZFUiIsInByb2R1Y3QiOiJQTCIsInByb2dyYW0iOiIxMDAwMDAwMDAwNDUwMDEiLCJyZWZlcmVuY2UiOiJSRUYxMDAwMDA1MTQiLCJyZWFzb24iOiJTZXR0bGVtZW50IiwidHJhbnNhY3Rpb25BbW91bnQiOnsiYW1vdW50IjoiMTAwIiwiY3VycmVuY3kiOiJVU0QifSwiZGVidG9yQWNjb3VudCI6eyJpZGVudGlmaWNhdGlvbiI6IjIwMDY4NjM2MjUwNTIxNSIsImlkZW50aWZpY2F0aW9uVHlwZSI6IkFDQ09VTlRfTlVNQkVSIiwiaWRlbnRpZmljYXRpb25UeXBlMiI6IlNBVklOR1MiLCJpbnN0aXR1dGlvbiI6eyJuYW1lIjoiRklOV0lTRSBCQU5LIiwiaWRlbnRpZmljYXRpb24iOiIwMTExMDI2MzgiLCJpZGVudGlmaWNhdGlvblR5cGUiOiJBQkEifX0sImNyZWRpdG9yQWNjb3VudCI6eyJpZGVudGlmaWNhdGlvbiI6IjIwMDUwMTkxNjAyODExNiIsImlkZW50aWZpY2F0aW9uVHlwZSI6IkFDQ09VTlRfTlVNQkVSIiwiaWRlbnRpZmljYXRpb25UeXBlMiI6IlNBVklOR1MiLCJpbnN0aXR1dGlvbiI6eyJuYW1lIjoiRklOV0lTRSBCQU5LIiwiaWRlbnRpZmljYXRpb24iOiIxMDExMTUzOTkiLCJpZGVudGlmaWNhdGlvblR5cGUiOiJBQkEifX19",
"processId": "PL25060403017008"
},
"header": {
"reference": "REF100000514",
"apiKey": "0357862f1a984778a4d584a6c0ca3273",
"signature": "MEYCIQCY0HxPlIGYG98sz+/l2mZY7oXUcUxZj6aWONfUUk1kGwIhANrOkk3w4nciALAL52XUO+2+JoiXWXnRjuKBp2OBlhgD"
}
}
Error Codes
Error Codes
Error Code | Error Message |
---|---|
A107 | DUPLICATE_REFERENCE |
A112 | INVALID_AMOUNT |
A113 | INVALID_CHANNEL |
A114 | CUSTOMER_NOT_FOUND |
A116 | INVALID_API_KEY |
A118 | TRANSACTION_REFERENCE_EMPTY |
A122 | PROGRAM NOT FOUND |
A123 | CREDITOR_ACCOUNT_TYPE_EMPTY |
A126 | TRANSACTION_TYPE_EMPTY |
A147 | TRANSACTION NOT FOUND |
A157 | INVALID ACCOUNT NUMBER |
A161 | DEBTOR ACCOUNT NOT FOUND |
A166 | DEBTOR_ACCOUNT_TYPE_EMPTY |
A167 | DEBTOR_ACCOUNT_ID_EMPTY |
A169 | ACCOUNT NUMBER DOES NOT MATCH WITH API KEY |
A172 | IDENTIFICATIONTYPE2 SHOULD BE EITHER SAVINGS OR CHECKING |
A183 | PAYLOAD EMPTY |
A184 | INVALID ORIGINAL TRANSACTION STATUS |
A185 | TRANSACTION ALREADY REVERSED |
A186 | CREDITOR FIRSTNAME REQUIRED |
A187 | CREDITOR POSTAL ADDRESS ADDRESSLINE1 REQUIRED |
A188 | CREDITOR POSTAL ADDRESS ZIPCODE REQUIRED |
A189 | CREDITOR POSTAL ADDRESS COUNTRYCODE REQUIRED |
A190 | CREDITOR CONTACT EITHER PRIMARYEMAIL OR PRIMARYPHONE REQUIRED |
A191 | DEBTOR FIRSTNAME REQUIRED |
A192 | DEBTOR POSTAL ADDRESS ADDRESSLINE1 REQUIRED |
A193 | DEBTOR POSTAL ADDRESS ZIPCODE REQUIRED |
A194 | DEBTOR POSTAL ADDRESS COUNTRYCODE REQUIRED |
A195 | DEBTOR CONTACT EITHER PRIMARYEMAIL OR PRIMARYPHONE REQUIRED |
A196 | DEBTOR USERTYPE REQUIRED |
A197 | DEBTOR IDENTIFICATION REQUIRED |
A198 | DEBTOR IDENTIFICATIONTYPE REQUIRED |
A199 | CREDITOR USERTYPE REQUIRED |
A200 | CREDITOR IDENTIFICATION REQUIRED |
A201 | CREDITOR IDENTIFICATIONTYPE REQUIRED |
A205 | INVALID_PROGRAM |
A206 | INVALID_PRODUCT |
A207 | PRODUCT_PROGRAM_CHANNEL SETTING NOT FOUND |
A208 | ID EMPTY |
A209 | APIKEY NOT FOUND |
1111 | CREDITOR ACCOUNT NOT FOUND |
1113 | CREDITOR NOT FOUND |
1116 | TRANSACTION AMOUNT NOT FOUND |
1117 | TRANSACTION CURRENCY NOT FOUND |
1122 | CREDITOR ACCOUNT IDENTIFICATION TYPE NOT FOUND |
1123 | CREDITOR ACCOUNT IDENTIFICATION TYPE2 NOT FOUND |
1126 | DEBTOR ACCOUNT IDENTIFICATION TYPE NOT FOUND |
1127 | PRODUCT NOT FOUND |
1128 | PROGRAM NOT FOUND |
1129 | CHANNEL NOT FOUND |
1130 | TRANSACTION TYPE NOT FOUND |
1131 | INVALID API KEY |
2053 | INVALID_ACCOUNT_NUMBER |
5019 | INSUFFICIENT BALANCE |
9999 | INTERNAL ERROR |
1001 | CARD HOLDER ALREADY EXISTS |
1002 | INVALID CARDHOLDER FIRST NAME |
1003 | INVALID CARDHOLDER PHONE NUMBER |
1004 | INVALID CARDHOLDER ADDRESS LINE 1 |
1005 | INVALID CARDHOLDER CITY |
1006 | INVALID CARDHOLDER STATE |
UNAUTHORIZED | Access Denied |
INVALID_SIGNATURE | Invalid Signature |
NOT_FOUND_USER_DEVICE | User device not found |
BAD_CREDENTIAL | Invalid Credential |